name: docker

on:
  workflow_dispatch:
  #pull_request:
  #  paths:
  #    - '.docker/**'
  #    - '.github/workflows/docker.yml'

jobs:
  setup:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: install stable
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable

      - name: install Linux dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y libgtk-3-dev

      - name: install cross
        run: cargo install cross --git https://github.com/cross-rs/cross

      - name: Upload cross
        uses: actions/upload-artifact@v3
        with:
          name: cross
          path: '~/.cargo/bin/cross'
          if-no-files-found: error

      - name: build CLI
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --manifest-path ./tooling/cli/Cargo.toml

      - name: Upload CLI
        uses: actions/upload-artifact@v3
        with:
          name: cargo-tauri
          path: tooling/cli/target/debug/cargo-tauri
          if-no-files-found: error

  docker:
    needs: setup
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        target:
          - { name: 'aarch64-unknown-linux-gnu', filename: 'aarch64' }

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: install stable
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          target: ${{ matrix.target.name }}

      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Download cross
        uses: actions/download-artifact@v3
        with:
          name: cross
          path: '~/.cargo/bin'

      - name: Download CLI
        uses: actions/download-artifact@v3
        with:
          name: cargo-tauri
          path: 'examples/api'

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build and export to Docker
        uses: docker/build-push-action@v3
        with:
          context: .docker/cross
          file: .docker/cross/${{ matrix.target.filename }}.Dockerfile
          load: true
          tags: ${{ matrix.target.name }}:latest

      - name: install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libayatana-appindicator3-dev librsvg2-dev patchelf

      - name: Test
        run: |
          cd tooling/api
          yarn && yarn build
          cd ../../examples/api
          yarn
          . .setup-cross.sh
          chmod +x cargo-tauri
          chmod +x $HOME/.cargo/bin/cross
          ./cargo-tauri build --runner cross --bundles deb --target ${{ matrix.target.name }} --verbose

      - name: Build and push
        uses: docker/build-push-action@v3
        with:
          context: .docker/cross
          file: .docker/cross/${{ matrix.target.filename }}.Dockerfile
          push: true
          tags: ghcr.io/${{ github.repository }}/${{ matrix.target.name }}:latest
